/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.losalpes.persistence;

import com.losalpes.persistence.entity.Cliente;
import com.losalpes.persistence.entity.CriterioBusqueda;
import com.losalpes.persistence.entity.Mueble;
import com.losalpes.persistence.entity.TipoMueble;
import com.losalpes.persistence.entity.Usuario;
import java.util.List;
import javax.ejb.Local;

/**
 * @author Orlando
 */
@Local
public interface IPersistenceServices {

    /**
     * Inserta un egistro de la entidad
     * @param obj entidad
     */
    public void create(java.lang.Object obj);

    /**
     * actualiza un registro de la entidad
     * @param obj rra un registro de la entidad
     */
    public void update(java.lang.Object obj);

    /**
     * borra un registro de la entidad
     * @param obj
     */
    public void delete(java.lang.Object obj);

    /**
     * encuentra todos los registrs de la entidad
     * @param c Clase de la entidad
     * @return lista con entidades
     */
    public java.util.List findAll(java.lang.Class c);

    /**
     * Encuentra un registro de la entidad por el identificador
     * @param c Clase de la entidad
     * @param id identificador
     * @return entidad encontrada
     */
    public java.lang.Object findById(java.lang.Class c, java.lang.Object id);


    /**
     * encuentra un cliente por un criterio
     * @param criterioBusqueda criterio
     * @return liste de clientes
     */
    public List<Cliente> findClienteByCriterio(CriterioBusqueda criterioBusqueda);

    /**
     * Permite autenticar las credenciales de un usuario
     * @param usuario Usuario a autenticar
     * @return Usuario si lo encontro o sino null
     */
    public Usuario autenticarUsuario(String usuario, String pwd);

    /**
     * encuentra el cliente que tiene asociado un usuario
     * @param usuario usuario
     * @return cliente asociado
     */
    public com.losalpes.persistence.entity.Cliente findClienteByUsuario(com.losalpes.persistence.entity.Usuario usuario);

    /**
     * Encuentra la lista de muebles de un mismo tipo
     * @param tipoMueble tipo del mueble
     * @return lista de muebles
     */
    public List<Mueble> findMuebleByType(TipoMueble tipoMueble);

    /**
     * obtiene la lista de compras para el reporte de ventas por clientes
     * @param fecha1 fecha inicial
     * @param fecha2 fecha final
     * @param cliente cliente
     * @return liste de compras
     */
    public java.util.List<com.losalpes.persistence.entity.Compra> ventasClienteReporte(java.util.Date fecha1, java.util.Date fecha2, java.lang.String cliente);

    /**
     * obtiene la lista de compras para el reporte de ventas por producto
     * @param fecha1 fecha inicial
     * @param fecha2 fecha final
     * @return lista de compras
     */
    public java.util.List<com.losalpes.persistence.entity.Compra> ventasProductoReporte(java.util.Date fecha1, java.util.Date fecha2);

    /**
     * obtiene la lista de compras para el reporte de ventas por dìa
     * @param fecha1 fecha inicial
     * @param fecha2 fecha final
     * @param ciudad ciudad
     * @return lista de compras
     */
    public java.util.List<com.losalpes.persistence.entity.ItemCompra> ventasDiaReporte(java.util.Date fecha1, java.util.Date fecha2, java.lang.String ciudad);

    public java.util.List productoMasVendido();
}
